package fwhmc.rt.exception;


import java.util.Optional;

/**
 * 类描述: 自定义异常
 *
 * @author : 王雷
 * @date : 2021/4/22 0022 上午 9:41
 */
public class RtRuntimeException extends RuntimeException {
    private static final long serialVersionUID = 7809397927157003590L;
    /**
     * 错误编码
     */
    private Integer errorCode = 200;

    /**
     * 错误说明
     */
    private String errorMessage = "";

    /**
     * 错误信息
     */
    private String content = "";

    /**
     * 自定义异常.
     *
     * @param errorCode 错误编码
     * @param message   信息描述
     */
    public RtRuntimeException(Integer errorCode, String message) {
        super((message == null) ? "" : message);
        this.errorCode = errorCode;
        this.errorMessage = message;
    }

    /**
     * 自定义异常.
     *
     * @param errorCode 错误编码
     * @param message   信息描述
     * @param content   错误信息
     */
    public RtRuntimeException(Integer errorCode, String message, String content) {
        super(((message == null) ? "" : message) + "-" + ((content == null) ? "" : content));
        this.errorCode = errorCode;
        this.errorMessage = message;
        this.content = content;
    }

    /**
     * 自定义异常.
     *
     * @param rtStatusCodeEnum 异常枚举类型
     * @param content          错误信息
     */
    public RtRuntimeException(RtStatusCodeEnum rtStatusCodeEnum, String content) {
        super(content);
        rtStatusCodeEnum = Optional.ofNullable(rtStatusCodeEnum).orElse(RtStatusCodeEnum.Code_500);
        this.errorCode = rtStatusCodeEnum.getContent();
        this.errorMessage = rtStatusCodeEnum.getContentName();
        this.content = content;
    }

    /**
     * 自定义异常.
     *
     * @param errorCode 错误编码
     * @param message   信息描述
     */
    public RtRuntimeException(Integer errorCode, String message, Throwable cause) {
        super(message, cause);
        this.errorCode = errorCode;
        this.errorMessage = message;
    }

    /**
     * 自定义异常.
     *
     * @param errorCode 错误编码
     * @param message   信息描述
     * @param content   错误信息
     */
    public RtRuntimeException(Integer errorCode, String message, String content, Throwable cause) {
        super(((message == null) ? "" : message) + "-" + ((content == null) ? "" : content), cause);
        this.errorCode = errorCode;
        this.errorMessage = message;
        this.content = content;
    }

    /**
     * 错误编码
     *
     * @author 王雷    (2018年4月12日 下午4:28:47)
     */
    public Integer getErrorCode() {
        return errorCode;
    }

    /**
     * 错误编码
     *
     * @author 王雷    (2018年4月12日 下午4:28:50)
     */
    public void setErrorCode(Integer errorCode) {
        this.errorCode = errorCode;
    }

    /**
     * 错误说明
     *
     * @author 王雷    (2018年4月12日 下午4:28:54)
     */
    public String getErrorMessage() {
        return errorMessage;
    }

    /**
     * 错误说明
     *
     * @author 王雷    (2018年4月12日 下午4:29:07)
     */
    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    /**
     * 错误信息
     *
     * @author 王雷    (2018年4月12日 下午4:29:11)
     */
    public String getContent() {
        return content;
    }

    /**
     * 错误信息
     *
     * @author 王雷    (2018年4月12日 下午4:29:17)
     */
    public void setContent(String content) {
        this.content = content;
    }

    /**
     * 错误信息综合描述
     *
     * @author 王雷    (2018年4月12日 下午4:30:20)
     */
    public String contentMessage() {
        return this.errorMessage + this.content;
    }

}
